package cn.iocoder.yudao.module.erp.service.dpitem;

import cn.iocoder.yudao.module.erp.controller.admin.dpitem.dpitemyw.vo.DpItemYwPageReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.dpitem.dpitemyw.vo.DpItemYwSaveReqVO;
import cn.iocoder.yudao.module.erp.dal.mysql.dp.DpYwMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;

import org.springframework.validation.annotation.Validated;

import cn.iocoder.yudao.module.erp.dal.dataobject.dpitem.DpItemYwDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.erp.dal.mysql.dpitem.DpItemYwMapper;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*;

/**
 * ERP义乌制单货号详情 Service 实现类
 * @author 天使管理员
 */
@Service
@Validated
public class DpItemYwServiceImpl implements DpItemYwService {

    @Resource
    private DpYwMapper dpYwMapper;
    @Resource
    private DpItemYwMapper dpItemYwMapper;

    @Override
    public Long createDpItemYw(DpItemYwSaveReqVO createReqVO) {
        // 插入
        DpItemYwDO dpItemYw = BeanUtils.toBean(createReqVO, DpItemYwDO.class);
        dpItemYwMapper.insert(dpItemYw);
        // 返回
        return dpItemYw.getId();
    }

    @Override
    public void updateDpItemYw(DpItemYwSaveReqVO updateReqVO) {
        // 更新
        DpItemYwDO updateObj = BeanUtils.toBean(updateReqVO, DpItemYwDO.class);
        dpItemYwMapper.updateById(updateObj);
    }

//    @Override
//    @Transactional(rollbackFor = Exception.class)
//    public void splitDpItemYw(String no, List<DpItemYwSaveReqVO> createReqVOList) {
//        if (createReqVOList == null || createReqVOList.isEmpty()) {
//            return;
//        }
//        DpYwDO dpYwDO = dpYwMapper.selectById(no);
//        Integer totalCount = createReqVOList.stream()
//                .mapToInt(DpItemYwSaveReqVO::getOutQuantity)  // 获取每个元素的count
//                .sum();  // 累加求和
//        Integer count = dpYwDO.getInCount();
//        if (count < totalCount){
////            throw new IllegalArgumentException("总装车件数超出最大值: " + count);
//            throw exception(DP_ITEM_YW_COUNT_OUTOF_MAX);
//        }
//
//        Double totalVolume = createReqVOList.stream()
//                .map(DpItemYwSaveReqVO::getInVolume)  // 获取每个元素的inVolume
//                .filter(Objects::nonNull)  // 排除空值（防止空指针异常）
//                .reduce(0.0, Double::sum);  // 累加求和
//        Double inVolume = dpYwDO.getInVolume();
//        if (inVolume < totalVolume) {
////            throw new IllegalArgumentException("总装车体积超出最大值: " + inVolume);
//            throw exception(DP_ITEM_YW_VOLUME_OUTOF_MAX);
//        }
//
//        Double totalWeight = createReqVOList.stream()
//                .map(DpItemYwSaveReqVO::getWeight)  // 获取每个元素的weight
//                .filter(Objects::nonNull)  // 排除空值（防止空指针异常）
//                .reduce(0.0, Double::sum);  // 累加求和
//        Double weight = dpYwDO.getWeight();
//        if (weight < totalWeight) {
////            throw new IllegalArgumentException("总装车重量超出最大值: " + inVolume);
//            throw exception(DP_ITEM_YW_WEIGHT_OUTOF_MAX);
//        }
//
//        List<DpItemYwDO> dpItemYwDOS = new ArrayList<>();
//        for (DpItemYwSaveReqVO createReqVO : createReqVOList){
//            DpItemYwDO dpItemYw = BeanUtils.toBean(createReqVO, DpItemYwDO.class);
//            dpItemYw.setCount(createReqVO.getOutQuantity());
//            // 更新库存信息
//            dpItemYwMapper.updateById(dpItemYw);
//            //剩余货物详情
//            if (createReqVO.getRemQuantity() != 0){
//                dpItemYw.setId(null);
//                dpItemYw.setNo(no);
//                dpItemYw.setCount(createReqVO.getRemQuantity());
//                dpItemYw.setInventoryStatus("0");
//                dpItemYwDOS.add(dpItemYw);
//            }
//        }
////        List<Long> ids = createReqVOList.stream().map(DpItemYwSaveReqVO::getId).collect(Collectors.toList());
////        dpItemYwMapper.deleteByIds(ids);
//        dpItemYwMapper.insertBatch(dpItemYwDOS);
//    }

    @Override
    public void deleteDpItemYw(Long id) {
        dpItemYwMapper.deleteById(id);
    }

    @Override
    public DpItemYwDO getDpItemYw(Long id) {
        return dpItemYwMapper.selectById(id);
    }

    @Override
    public PageResult<DpItemYwDO> getDpItemYwPage(DpItemYwPageReqVO pageReqVO) {
        return dpItemYwMapper.selectPage(pageReqVO);
    }

}